import { reqGetGoodsInfo, reqAddOrUpdataShopCart } from "@/api"
// 封装游客身份模块uuid  —————— 生成一个随机字符串（不能在变了）
import {getUUID} from '@/utils/uuid_token'
const state = {
    goodsInfo: {},
    //游客临时身份
    uuid_token: getUUID(),
}
const mutations = {
    GETGOODSINFO(state, goodsInfo) {
        state.goodsInfo = goodsInfo
    }
}
const actions = {
    // 获取产品的信息
    async getGoodsInfo({ commit }, skuId) {

        let result = await reqGetGoodsInfo(skuId);
        if (result.code == 200) {
            commit('GETGOODSINFO', result.data)
        }
    },
    // 将产品添加到购物车中
    async addOrUpdataShopCart({ commit }, { skuId, skuNum }) {
        //加入购物车返回的结果
        //加入购物车后(发请求),前台将参数带给服务器
        // 服务器写入数据成功,并且没有返回其他数据,只返回code=200代表请求成功
        //服务器这次没有返回其他参数,所以不需要三连环存储数据
        let result = await reqAddOrUpdataShopCart(skuId, skuNum);
        if (result.code == 200) {
            //    加入购物车成功
            return 'ok';
        } else {
            //加入购物车失败
            return Promise.reject(new Error('fail'));
        }

    }
}
const getters = {
    //state.goodsInfo初始状态空对象，空对象的categotuView属性值undefined
    // 计算出的categoryView属性值至少是一个空对象，这样就不会假报错
    categoryView(state) {
        return state.goodsInfo.categoryView || {};
    },
    skuInfo(state) {
        return state.goodsInfo.skuInfo || {};
    },
    //有网络时state.goodsInfo.spuSaleAttrList  服务器数据返回的因该是一个数组
    // 加[] 是因为没有网络时state.goodsInfo.spuSaleAttrList t因该返回的是undefined 会报错，所以后面加空数组
    spuSaleAttrList(state) {
        return state.goodsInfo.spuSaleAttrList || [];
    }


}

export default {
    state,
    mutations,
    actions,
    getters
}